home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS in a Box 7
/
BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso
/
Files
/
Prog
/
T
/
THINK C 5.0.3 Update.cpt
/
THINK C 5.0.3 Update
/
member.c
< prev
next >
Wrap
Text File
|
1992-08-24
|
1KB
|
96 lines
/*
* member.c - test class membership
*
* Copyright (c) 1991 Symantec Corporation. All rights reserved.
*
*/
#define OOPS_PRIVATE
#include "oops.h"
/*
* __member - test class membership
*
* The compiler, for
*
* if (member(obj, C)) ...
*
* generates:
*
* MOVE._ obj->classID,-(SP)
* PEA C
* JSR __member
* ADDQ.L #?,SP
* TST.B D0
*
* This routine tests class membership by searching the superclass
* chain for a match on the object's class.
*/
static char
dummy()
{
asm {
;;
;
; char __member(void *class, void *objclass) // far version
; char __member(void *class, short objclass) // near version
;
;;
extern __member:
;;
;
; set D0 = result (start by assuming "true")
; set D1 = class Ref
; set D2 = object's class Ref
;
;;
moveq #1,d0
move.l 4(sp),d1
#ifdef BASE_REG
sub.l BASE_REG,d1
#endif
move._ 8(sp),d2
;;
;
; compare class Ref's
;
;;
@1 cmp._ d1,d2
beq.s @2 ; it's a member
;;
;
; advance to superclass
;
;;
movea._ d2,a0
#ifdef BASE_REG
adda.l BASE_REG,a0
#endif
moveq #1,d2
add.w (a0)+,d2
lsl.w #DSHIFT,d2
move._ 0(a0,d2.w),d2
bne.s @1
;;
;
; done
;
;;
moveq #0,d0 ; it's not a member
@2 }
}